package com.ecommerce.dto;

import lombok.Data;

import java.io.Serializable;

/**
 * 商品查询请求数据传输对象
 * <p>
 * 用于封装商品分页查询的请求参数，支持基于PIT(Point-In-Time)的安全分页查询
 * 实现了Serializable接口以支持序列化
 *
 * @see java.io.Serializable
 */
@Data
public class ProductQueryRequestDTO implements Serializable {
    /**
     * 搜索关键词
     * <p>
     * 用于商品名称或描述的模糊匹配
     */
    private String keyword;          // 搜索关键词

    /**
     * 一级分类ID
     * <p>
     * 用于按商品主分类筛选
     */
    private Long primaryCategory;    // 一级分类ID

    /**
     * 二级分类ID
     * <p>
     * 用于按商品子分类筛选，可选参数
     */
    private Long secondaryCategory;  // 二级分类ID

    /**
     * 每页显示的商品数量
     * <p>
     * 由前端指定，控制分页大小
     */
    private Integer pageSize;       // 每页大小（前端指定）

    /**
     * PIT(Point-In-Time) ID
     * <p>
     * Elasticsearch的快照ID，用于保持分页一致性
     * 首次查询可为空，后续分页需携带
     */
    private String pitId;           // PIT ID（用于分页）

    /**
     * 分页标记数组
     * <p>
     * 用于search_after分页，包含上一页最后一条记录的排序值
     * 首次查询可为空，后续分页需携带
     */
    private Object[] searchAfter;    // 分页标记
}